/*
题目：递增的三元子序列
给你一个整数数组 nums ，判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ，使得 nums[i] < nums[j] < nums[k] ，返回 true ；否则，返回 false 。
 */
public class IncreasingTriplet {
    public boolean increasingTriplet(int[] nums) {
        int[] leftMin = new int[nums.length];
        int[] rightMax = new int[nums.length];
        leftMin[0] = Integer.MAX_VALUE;
        rightMax[nums.length - 1] = Integer.MIN_VALUE;
        //维护最小值/最大值的数组是不包括下标本身的元素的
        for(int i = 1;i < nums.length;i++){
            leftMin[i] = Math.min(leftMin[i - 1],nums[i - 1]);
        }

        for(int i = nums.length - 2;i >= 0;i--){
            rightMax[i] = Math.max(rightMax[i + 1],nums[i + 1]);
        }

        for(int i = 1;i < nums.length - 1;i++){
            if(leftMin[i] < nums[i] &&
                    rightMax[i] > nums[i]){
                return true;
            }
        }
        return false;
    }
}
